package com.zhijian.medical.service;


import com.zhijian.medical.entity.po.Person;
import com.zhijian.medical.entity.vo.request.PersonSaveOrUpdateVo;
import com.zhijian.medical.entity.vo.request.PersonSearchVo;
import com.zhijian.medical.entity.vo.request.RegisterTrainByAssessmentVo;
import com.zhijian.medical.entity.vo.response.PersonAllVo;
import com.zhijian.medical.entity.vo.response.PersonExamRecordVo;
import com.zhijian.medical.entity.vo.response.PersonVo;
import com.zhijian.medical.util.Page;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 人员 业务处理层
 *
 * @author HCG
 * @version 1.0
 * @date 2022-01-01 15:41:25
 */
public interface PersonService {

    /**
     * 主键查询
     *
     * @param id
     * @return
     */
    Person selectById(Long id);

    /**
     * 根据手机号查询
     *
     * @param phone
     * @return
     */
    Person selectByPhone(String phone);

    /**
     * 主键查询vo
     *
     * @param id
     * @return
     */
    PersonVo selectVoById(Long id);

    /**
     * 姓名查询vo
     *
     * @param name
     * @return
     */
    PersonVo selectVoByName(String name);

    /**
     * 按照主键删除
     *
     * @param id
     */
    void deleteById(Long id);

    /**
     * 新增
     *
     * @param person
     * @return
     */
    Long insert(Person person);

    /**
     * 更改
     *
     * @param person
     * @return
     */
    boolean update(Person person);

    /**
     * 修改
     *
     * @param personSaveOrUpdateVo
     * @return
     */
    boolean update(PersonSaveOrUpdateVo personSaveOrUpdateVo);

    /**
     * 修改
     *
     * @param record
     * @return
     */
    boolean updateByPrimaryKeySelective(Person record);

    /**
     * 总数
     *
     * @param personSearchVo
     * @return
     */
    Integer count(PersonSearchVo personSearchVo);

    /**
     * 列表
     *
     * @param personSearchVo
     * @return
     */
    List<PersonVo> selectList(PersonSearchVo personSearchVo);

    /**
     * 分页展示
     *
     * @param personSearchVo
     * @return
     */
    Page<PersonVo> selectPage(PersonSearchVo personSearchVo);

    /**
     * 根据工号与密码查询，密码可不填
     *
     * @param jobNumber
     * @param password
     * @return
     */
    Person selectByJobNumberAndPassword(String jobNumber, String password);

    /**
     * 新增
     *
     * @param personSaveOrUpdateVo
     * @return
     */
    Long insert(PersonSaveOrUpdateVo personSaveOrUpdateVo);

    /**
     * 根据工号查询
     *
     * @param jobNumber
     * @return
     */
    PersonVo selectVoByJobNumber(String jobNumber);

    /**
     * 根据人员id查询考核记录
     *
     * @param userId
     * @return
     */
    List<PersonExamRecordVo> selectPersonExamRecordVoByUserId(Long userId);

    /**
     * 根据id查询总的vo
     *
     * @param id
     * @return
     */
    PersonAllVo selectAllVoById(Long id);

    /**
     * 基于一个考核注册专项培训人员
     *
     * @param registerTrainByAssessmentVo
     * @return
     */
    String registerTrainByAssessment(RegisterTrainByAssessmentVo registerTrainByAssessmentVo);

    /**
     * 在职人员导入Excel
     *
     * @param file
     * @return
     */
    boolean importExcel(MultipartFile file);

    /**
     * 辅助人员导入
     *
     * @param file
     * @return
     */
    boolean importFzExcel(MultipartFile file);

    /**
     * 修改签字图片
     *
     * @param personId
     * @param signPicFilePath
     * @return
     */
    boolean updateSignPic(Long personId, String signPicFilePath);

    /**
     * 生成下一个编码
     *
     * @param type
     * @return
     */
    String createNextCode(Byte type);

    /**
     * 查询出最新数据的code
     *
     * @param type
     * @return
     */
    String selectMaxCode(Byte type);
}